iT邦幫忙

2023 iThome 鐵人賽

DAY 17
1

在前面的 3 篇文章,我們先是對 dbt/SQL 做了整體概括性的介紹,並且安裝好了一個精簡版的現代資料棧 (modern data stack),於是,我們可以開始透過一個實際的例子,帶著讀者們來體驗一下, dbt 是怎麼使用的。

範例專案

dbt 官方有提供一個可以用來快速起步的專案 jaffle_shopjaffle_shop 專案建議搭配的資料倉儲有兩種:Postgres 與 DuckDB 。接下來,我們會用 DuckDB 來玩玩看 jaffle_shop

下載 jaffle_shop 專案

  • 在電腦裡,找一個資料夾,比方說 ~/analytics 做為存放所有「分析專案」的資料夾。
  • cd ~/analytics
  • git clone git@github.com:dbt-labs/jaffle_shop.git
  • cd jaffle_shop

設置 jaffle_shop 的環境設置檔

  • 編輯 ~/.dbt/profiles.yaml
  • 在檔案裡,找個區塊貼上
jaffle_shop:
  target: dev
  outputs:
    dev:
      type: duckdb
      path: jaffle_shop.duckdb

這邊簡單解釋一下這個環境設置:

  • 最外層的 jaffle_shop ,這個字串需要跟專案資料夾的資料夾名稱一致。
  • target 現在是指向 dev 。一般而言,我們在 dbt 的專案,會有 devprod 兩種設置。dev 是開發的時候用的、而 prod 才是正式布置時使用的。
  • outputs 下方的 dev 這邊的細節通常是與資料倉儲 (Data Warehouse) 相關的。type 會用來指定是哪一種資料倉儲。如果是 Postgres 的話,這邊就會有 host/post/user/password 之類的設置。因為我們現在是用 DuckDB ,所以最簡單的設置,只需要設定 path 而已,而此處的 path 就是 DuckDB 儲存資料的檔案。

這邊有一個問題:「我們怎麼知道,我們把『環境設置檔』設定對了?」dbt 提供了一個非常有用的指令可以幫助我們回答這個。

  • dbt debug

dbt_debug_success.png
如果 dbt debug 得到的輸出,有綠色而沒有紅色的話,就代表成功了。

terminal 的輸出

一般來講,如果能看懂 dbt debug 的輸出的使用者,通常在日後,遇到操作的問題時,都相對有機會快速地排除困難,然後前進。

當然,要能看懂 terminal 的輸出這件事是相當專業的,需要的知識更是遠超過一般資料分析師需要的範疇。換句話說,如果看不懂的話,也許就值得考慮 dbt cloud ,又或是公司的資料團隊要有軟體工程專業的人可以協助排除困難。

檢查資料庫的內容

在執行過 dbt debug 之後,dbt 就會自動幫我們在 jaffle_shop 的資料夾下,建立一個新的檔案 jaffle_shop.duckdb 。而這個檔名,自然就是我們之前在 ~/.dbt/profiles.yaml 指定的。

下圖我們執行了:

  • 用 DuckDB 的 CLI 程式 duckdb 開啟 jaffle_shop.duckdb
  • 在 DuckDB 的環境,下 DuckDB 的指令 SHOW TABLES

after_dbt_debug.png
得到一片空白。這是正常的,因為還沒有匯入資料嘛!

  • 在 DuckDB 的環境,下 DuckDB 的指令 .exit 就可以離開 DuckDB 的環境。

匯入資料

要匯入資料,我們可以先用一個偷吃步的方式,透過 dbt seed 這個指令,把 jaffle_shop/seeds 資料夾下的三個 csv 檔,都匯入 DuckDB 裡。

  • dbt seed

執行完之後,再開啟 jaffle_shop.duckdb 來看。
after_dbt_seed.png

再論「匯入資料」

一般的 dbt 專案,其實不會常用 dbt seed 指令來匯入大量的資料.只有少數的 dimensional data 適合用 dbt seed 來匯入而已。但是,現在的這個專案只是範例而已,就一切走最簡單的路線。

編譯與建立視圖 (view)

當資料倉儲已經有了資料之後,我們就可以來進行最重要的部分:「編譯與建立視圖」。編譯是把 jaffle_shop/models 資料夾下的 *.sql 檔,做字串取代,變成可以執行的 SQL statement 。而建立視圖的話,則是把編譯完成的 SQL statement 做執行,在資料倉儲建立視圖。

「編譯與建立視圖」這個動作,是用 dbt run 這個指令來啟動。

  • dbt run
    after_dbt_run.png

「編譯與建立視圖」完成之後,我們用 SHOW TABLES 一看,就會發現多了許多的視圖。

自動生成文件

dbt 可以透過下指令來自動生成文件、與資料譜系圖 (data lineage graph) 。其中,資料譜系圖可以呈現視圖與視圖之間的依賴關系,一旦當資料的複雜度增加時,這張圖就會變得非常重要。

  • dbt docs generate &&dbt docs serve

執行完上述的指令之後,就可以得到下圖。

dbt_docs_serve.png

dbt 專案大概是怎麼運作的?

如果是從零開始的話, 最基本、最簡單的 dbt 專案大概會是以如下的步驟來運作:

  1. dbt init $PROJ 來生成基本的資料夾結構。
  2. 把這個 $PROJ 資料夾加入版本控管軟體。
  3. 編輯 ~/.dbt/profiles.yaml 檔,把環境設置檔做對,於是 dbt 就可以與資料倉儲 (data warehouse) 連上。
  4. 開始編輯 $PROJ/models 下的 sql 檔,在其中寫入 資料轉換 。之後,如果又有要寫什麼新的資料轉換,就會再回到步驟 4 來寫新的 sql 檔。
  5. 執行 dbt run

註:

  • 第四步驟會一直新增$PROJ/models 下的 sql 檔,這些 sql 檔當然也要納入版本控管。
  • 將資料從各式資料來源導入資料倉儲之內,這是屬於 EL 的工作,換言之,不一定需要有 dbt seed 這個步驟。
  • 當視圖建立完成之後,資料的使用者就可以透過 Metabase 來檢視資料建模層 (data modeling layer)。

其它資源

  1. 對 dbt 或 data 有興趣 👋?歡迎加入 dbt community 到 #local-taipei 找我們,也有實體 Meetup 請到 dbt Taipei Meetup 報名參加
  2. 歡迎訂閱 PruningSuccess 電子報,主要談論軟體開發、資料處理、資料分析等議題。

上一篇
Tranformation layer: DuckDB 安裝
下一篇
Transformation layer: dbt 資料建模
系列文
當代資料工程與資料分析30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言